package services

import (
	"encoding/json"
	"fmt"

	"github.com/sirupsen/logrus"
)

//130	weekSwitch1	//	星期开关１     1字节8个位，1~7位分别代表星期一到星期日
//131	startTime1	//	开启时间1   小时（1字节）
//132		//	开启时间1   分钟（1字节）
//133	endTime1	//	关闭时间1   小时（1字节）
//134		//	关闭时间1   分钟（1字节）
//135	lightMode1	//	灯光模式1    0 正常  1日出日落  2跟随外界
//136	lightBrightness1	//	灯光亮度1   0~100%
//137	lightColorTemperature	//	灯光色温 0~100% 代表 4000K ~10500K的色温
//138	curveColorTemp1	//	曲线色温1
//139	curveColorTemp2	//	曲线色温2
//140	curveColorTemp3	//	曲线色温3
//141	colorTempDemo	//	色温演示
//142	spare1	//	备用
//143	spare2	//	备用
//144	spare3	//	备用
//145	spare4	//	备用
//146	spare5	//	备用
//147	sunriseSetTransDur	//	日出日落渐变时长  分钟
//148	tempLimitLight	//	限光温度
//149	highTempLightLimitSwitch	//	高温限光模式开关
//150	limitBrightness	//	限光亮度
//151	lightControlRegister	//	灯光控制寄存器

// ParseLightCtrlTData 解析灯光控制器的数据
func (d *DeviceData) ParseLightCtrlTData() error {
	if len(d.RegisterData) < 22 {
		return fmt.Errorf("payload:%v data length is invalid", d.RegisterData)
	}

	lightCtrlParams := LightCtrlTParams{
		WeekSwitch1:              d.RegisterData[0],
		StartTime1:               fmt.Sprintf("%d|%d", d.RegisterData[1], d.RegisterData[2]),
		EndTime1:                 fmt.Sprintf("%d|%d", d.RegisterData[3], d.RegisterData[4]),
		LightMode1:               d.RegisterData[5],
		LightBrightness1:         d.RegisterData[6],
		LightColorTemperature:    d.RegisterData[7],
		CurveColorTemp1:          d.RegisterData[8],
		CurveColorTemp2:          d.RegisterData[9],
		CurveColorTemp3:          d.RegisterData[10],
		ColorTempDemo:            d.RegisterData[11],
		Spare1:                   d.RegisterData[12],
		Spare2:                   d.RegisterData[13],
		Spare3:                   d.RegisterData[14],
		Spare4:                   d.RegisterData[15],
		Spare5:                   d.RegisterData[16],
		SunriseSetTransDur:       d.RegisterData[17],
		TempLimitLight:           d.RegisterData[18],
		HighTempLightLimitSwitch: d.RegisterData[19],
		LimitBrightness:          d.RegisterData[20],
		LightControlRegister:     d.RegisterData[21],
	}

	lightCtrlEvent := LightCtrlTEvent{
		Method: PayloadTypeMap[130], // Assuming 130 is the method type identifier for this payload
		Params: lightCtrlParams,
	}

	logrus.Infof("LightCtrlEvent: %+v", lightCtrlEvent)

	// 将事件数据转换为JSON格式
	payload, err := json.Marshal(lightCtrlEvent)
	if err != nil {
		return fmt.Errorf("error marshalling LightCtrlEvent: %v", err)
	}

	// 发送数据到平台
	err = PublishEvent(d.Mac, payload)
	if err != nil {
		return fmt.Errorf("error publishing event: %v", err)
	}

	return nil
}
